package com.navinfo.platform.trip.analysis.pojo;

import com.navinfo.platform.trip.common.pojo.PointProtocol;
import com.navinfo.platform.trip.common.util.CommonUtils;
import com.navinfo.platform.trip.common.util.DateUtils;
import lombok.Data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * 行程预切分对象
 * @author web
 */
@Data
public class PreTripInfo implements Serializable {
    /**
     * 行程ID<br/>
     * 相同tid，同一天内，从1递增
     */
    private Integer tripId;
    /**
     * 行程是否需要进行跨天处理<br/>
     * 批计算，一天当中的最后一个行程设值为true<br/>
     * 流计算，开始时间和结束时间不是同一天设值为true<br/>
     **/
    private boolean handleCrossDay;

    /**
     * 行程开始时间，单位：毫秒ms<br/>
     * 使用0200第一个有效点
     */
    private long startTime;
    /**
     * 行程开始原始经度 ，单位：以度为单位乘以10的6次方<br/>
     * 使用0200第一个有效点
     */
    private int startLongitude;
    /**
     * 行程开始原始纬度 ，单位：以度为单位乘以10的6次方<br/>
     * 使用0200第一个有效点
     */
    private int startLatitude;
    /**
     * 行程开始高程，单位m<br/>
     * 使用0200第一个有效点
     */
    private int startHeight;
    /**
     * 行程开始方向，0-359正北为0顺时针<br/>
     * 使用0200第一个有效点
     */
    private int startDirection;

    /**
     * 行程结束时间，单位毫秒ms<br/>
     * 使用0200最后一个有效点
     */
    private long endTime;
    /**
     * 行程结束原始经度，单位：以度为单位乘以10的6次方<br/>
     * 使用0200最后一个有效点
     */
    private int endLongitude;
    /**
     * 行程结束原始纬度 ，单位：以度为单位乘以10的6次方<br/>
     * 使用0200最后一个有效点
     */
    private int endLatitude;
    /**
     * 行程结束高程，单位m<br/>
     * 使用0200最后一个有效点
     */
    private int endHeight;
    /**
     * 行程结束方向，0-359正北为0顺时针<br/>
     * 使用0200最后一个有效点
     */
    private int endDirection;

    /**
     * 根据0200精准的里程，单位米m<br/>
     */
    private Integer preciseMileage;
    /**
     * 根据0200精准的油耗，单位毫升mL<br/>
     */
    private Integer preciseFuel;

    /**
     * 0200排序的匹配点
     */
    private List<PointProtocol> points0200 = new ArrayList<>();

    /**
     * 0f37和0200混合排序的匹配点
     */
    private List<PointProtocol> points0F37 = new ArrayList<>();

    @Override
    public String toString(){
        StringBuilder sb=new StringBuilder();
        sb.append("PreTripInfo Start--------");
        sb.append("\n");
        sb.append("[All_]");
        sb.append(DateUtils.format(new Date(startTime), DateUtils.DateFormat.YYYY_MM_DD_HH_MM_SS));
        sb.append("||");
        sb.append(DateUtils.format(new Date(endTime), DateUtils.DateFormat.YYYY_MM_DD_HH_MM_SS));
        sb.append("||").append(DateUtils.getDurationStr((endTime - startTime)/1000));
        sb.append("\n");
        if(CommonUtils.isCollectionNotEmpty(points0200)) {
            sb.append("[0200]");
            sb.append(DateUtils.format(new Date(points0200.get(0).getGpsTime()), DateUtils.DateFormat.YYYY_MM_DD_HH_MM_SS));
            sb.append("||");
            sb.append(DateUtils.format(new Date(points0200.get(points0200.size()-1).getGpsTime()), DateUtils.DateFormat.YYYY_MM_DD_HH_MM_SS));
            sb.append("||").append(DateUtils.getDurationStr((points0200.get(points0200.size()-1).getGpsTime()- points0200.get(0).getGpsTime())/1000));
            sb.append("||");
            sb.append(points0200.size());
            sb.append("\n");
        }
        if(CommonUtils.isCollectionNotEmpty(points0F37)) {
            sb.append("[0F37]");
            sb.append(DateUtils.format(new Date(points0F37.get(0).getGpsTime()), DateUtils.DateFormat.YYYY_MM_DD_HH_MM_SS));
            sb.append("||");
            sb.append(DateUtils.format(new Date(points0F37.get(points0F37.size()-1).getGpsTime()), DateUtils.DateFormat.YYYY_MM_DD_HH_MM_SS));
            sb.append("||").append(DateUtils.getDurationStr((points0F37.get(points0F37.size()-1).getGpsTime()- points0F37.get(0).getGpsTime())/1000));
            sb.append("||");
            sb.append(points0F37.size());

            sb.append("\n");
        }
        sb.append("mileage:").append(preciseMileage);
        sb.append("\n");
        sb.append("fuel:").append(preciseFuel);
        sb.append("\n");
        sb.append("handleCrossDay:").append(handleCrossDay);
        sb.append("\n");
        sb.append("\n");
        sb.append("PreTripInfo end________");
        sb.append("\n");
        return sb.toString();
    }

}
